package com.demo.qqClient.service;

import com.demo.qqcommon.Message;
import com.demo.qqcommon.MessageType;

import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

/**
 * @author gy
 * @date 2022/5/5
 */
public class ClientConnectServerThread extends Thread{

    /**
     该线程需要持有socket
     */
    private Socket socket;

    private Boolean loop = true;

    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    /**
     * 该线程需要持有socket
     */
    @Override
    public void run() {
        // 因为 该线程 一直要保持和 服务器端通讯，while循环
        while (loop){
            System.out.println("客户端 等待  从 服务器端发送的消息。。。。");
            try {
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                // 如果服务器端没有发送 Message  对象，线程会阻塞
                Message msg = (Message) ois.readObject();

                // 判断 msg 类型 ，做相应的业务处理
                if (msg.getMsgType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)) {
                    // 取出在线列表信息，并显示
                    // 规定
                    String[] onlineUsers = msg.getContent().split(" ");
                    System.out.println("\n=======当前在线用户列表=========");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户："+ onlineUsers[i]);
                    }
                }else if(msg.getMsgType().equals(MessageType.MESSAGE_COMM_MES)){
                    // 把服务器端转发的消息，显示到控制台即可
                    System.out.println("\n" + msg.getSender() + " 对 " + msg.getGetter() + " 说: " + msg.getContent());
                }else if(msg.getMsgType().equals(MessageType.MESSAGE_TO_ALL_MES)){
                    // 把服务器端转发的 群聊消息，显示到控制台即可
                    System.out.println("\n" + msg.getSentTime() + " " +
                            msg.getSender() + " 对 " + "大家" + " 说: " + msg.getContent());
                }else if(msg.getMsgType().equals(MessageType.MESSAGE_FILE_MES)){
                    // 提示信息：
                    System.out.println("\n" + msg.getSender() + " 给 " + msg.getGetter() + "发送文件:" + msg.getSrc()
                            + " 到我的电脑目录 " + msg.getTarget());
                    // 取出msg的文件字节数组，通过文件输出流写入到我的本地磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(msg.getTarget());
                    fileOutputStream.write(msg.getFileBytes());
                    fileOutputStream.flush();
                    fileOutputStream.close();
                    System.out.println("\n 保存文件成功");


                } else {
                    System.out.println("是其他的message类型，暂不处理。。。");
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 为了更方便的得到socket
     */
    public Socket getSocket() {
        return socket;
    }
}
